//
//  EzFileSystem.h
//  ezLogin
//
//  Created by 刘跃龙 on 1/10/17.
//  Copyright © 2017 absolutemobile. All rights reserved.
//

#ifndef EzFileSystem_h
#define EzFileSystem_h

#include "EzTools.h"
#include <dirent.h>
#include <sys/stat.h>
#include <string>
#include <vector>
#include <list>

EZ_BEGIN

//  ---------------------------
//  ==> File
//  ---------------------------

#define EZ_SAFE_CLOSE_FILE(fp)             do { if(fp) { fclose(fp); fp = NULL; } } while(0)

/** 创建目录 */
extern void makeDir(std::string dir);
/** 检测文件是否存在 */
extern bool checkIsFileExsit(std::string fullPath);
/** 文件重命名/移动 */
extern int renameFile(std::string oldfilename,std::string newfilename);
/** 替换文件内容 */
extern bool replaceStringOfFile(std::string strInfo,std::string fullPath,long offset = 0);
/** 写字符串到文件 */
extern bool writeStringToFile(std::string strInfo,std::string fullPath,bool append = false);
/** 读字符串到文件 */
char* readStringFromFile(std::string fullPath,long offset = 0,long len = 0,long* totle = NULL,long* length = NULL);
/** 删除文件 */
extern bool removeFile(std::string fullPath);
//执行系统命令 return 执行结果
extern std::string getValueBySystemCommand(std::string strCommand);

extern std::string openFileByName(std::string strFullPath);
extern bool writeFileByName(std::string strFullPath,std::string strData);

extern int runSystemCommand(std::string strCommand);

extern bool checkIsHaveSDCard();

extern std::string checkNetworkStatus();

extern void SD_umount_flag(int val);
extern int getumount_flag();

extern uint32_t getSDStorageFileTime();

struct EzFile {
    std::string path;
    std::string name;
    struct stat status;
};
struct EzDir {
    std::string path;
    bool isExist;
    int sort; // 0 原始顺序，1 修改时间，2 大小
    bool isAsc; //ture:ASC(ascend)升序 false:DESC(descend)降序
    long long size;
    std::list<Ez::EzFile> list;
};
/** 遍历目录 (目前只是单层目录遍历，只遍历普通类型文件) */
extern Ez::EzDir listDir(std::string path,int sort = 0,bool isAsc = true);

EZ_END

#endif /* EzFileSystem_h */
